<?php

namespace App\Http\Controllers;

use DB;
use Illuminate\Http\Request;
use App\Member;
use Cache;

class TestController extends Controller
{
    //
    public function input($name)
    {
        return 'name值为' .$name;
    }
    public function form()
    {
        return view('form');
    }
    public function transfer()
    {
        return '转账成功';
    }
    public function profile()
    {
        // dump(session()->all());
        return view('profile');
    }
    public function store(Request $request)
    {
        $validatedDate =$request->validate([
            'name'=>'required|string|bail|max:10',
            'email' => 'required|email',
            'age'=> 'required|integer',
            'hibody' => 'required'
        ],[
            'name.required'=>'姓名不能为空',
            'email.emali'=>'邮件地址错误',
            '*.required'=>'此行不能为空',
            'age.integer'=>'不是数字',
        ]);
    }
    public function testSession()
    {
        session(['name'=>'张三','age'=>18]);
        dump(session('name'));
        dump(session('age',0));
        dump(session()->all());
        dump(session()->forget('name'));
        dump(session()->has('name'));
        session()->flush();
        dump(session()->all());
    }

    public function database()
    {
        $data=DB::tabse('member')->get();
        foreach($data as $v){
            dump($v->id . '-' . $v->name . '-' . $v->age . '-' . $v->email);
        }
    }
    public function storeDatabase()
    {
        $data=[
            //多行数据添加
            ['name'=>'Tom','age'=>'23','email'=>'tom@laravel.test'],
            ['name'=>'jim','age'=>'24','email'=>'jim@laravel.test'],
            ['name'=>'tim','age'=>'25','email'=>'tim@laravel.test'],
        ];

        //改变数据
        $data=[
            'email'=>'adlerian@adler.xyzd'
        ];
        //将表中所有记录的name字段的值都改
        dump(DB::table('member')->update($data));
        //将表中所有记录的age字段的值都加1
        dump(DB::table('member')->increment('age'));
        //将表中所有记录的age字段的值都减1
        dump(DB::table('member')->decrement('age'));
        //将表中所有记录的age字段的值都都加5
        dump(DB::table('member')->increment('age',5));
        //将表中所有记录的age字段的值都减5
        dump(DB::table('member')->decrement('age',5));
        $data=[
            //单行数据添加
            'name'=>'admin',
            'age'=>'66',
            'email'=>'adler@laravel.test',
        ];
        //参数形式1：where(字段名，运算符，字段值)
        DB::table('member')->where('id','=','1')->updata($data);
        //参数形式1：where(字段名，字段值)，使用“=”运算符
        DB::table('member')->where('id','1')->updata($data);
        //参数形式1：where([字段名=>字段值])，使用“=”运算符,支持多个字段，and关系
        DB::table('member')->where(['id' => 1])->updata($data);
        //where()表示and
        DB::table('member')->where(['id' => 6])->where(['name'=>'tom'])->updata($data);
        //orwhere()表示or,满足其中一个条件
        DB::table('member')->where(['id' => 4])->orwhere(['name'=>'admin1'])->updata($data);
    
        //查询数据
        // $data=DB::table('users')->get();
        // $data=DB::table('member')->where('id','<=',3)->get();
        // foreach($data as $v){
        //     echo $v->id . '-' . $v->name . '-' . $v->email.'<br>';
        // }
        // //单行查询
        // //查询id为1的记录
        // $data=DB::table('member')->where('id','1')->first();
        // //输出id字段的值
        // dump($data->name);

        // $data=DB::table('users')->get(['name','email','password']);
        // dump($data);

        //获取name和email两个字段，返回一条记录
        // $data=DB::table('member')->first(['name','email']);
        // dump($data);

        // //获取name和email两个字段
        // $data=DB::table('member')->select('name','email')->get();
        // dump($data);
        // //获取name和email两个字段,(数组参数)
        // $data=DB::table('member')->select(['name','email'])->get();
        // dump($data);

        //获取name字段,并设置别名为username
        // $data=DB::table('member')->select('name as username')->get();
        // dump($data);

        //不解析字段，直接传字符串为字段列表
        // $data=DB::table('member')->select(DB::raw('name,age'))->get();
        // dump($data);   
        
        // //查询id为1的记录，返回name字段的值
        // $name=DB::table('member')->where('id','1')->value('name');
        // //输出结果
        // dump($name);

        //$data=DB::table('member')->orderBy('age','asc')->get();
        // $data=DB::table('member')->limit(3)->offset(2)->get();
        // // dump($data);
        // foreach($data as $v){
        //     echo $v->id . '-' . $v->name . '-' . $v->age . '-' . $v->email . '<br>';
        // }

        //删除
        //$data=DB::table('member')->where('id','1')->delete();
        // $data=DB::table('member')->truncate();
        // dump($data);
        

        // //执行SQL语句
        // //执行select语句，返回结果集
        // $data=DB::select('SELECT * FROM `member`');
        // dump($data);

        // //添加语句
        // DB::insert('INSERT INTO `member` SET `name`=\'tom\'');
        // //修改语句
        // DB::update('UPDATE `member` SET `age`=\'20\' WHERE `name`=\'tom\'');
        // //删除
        // DB::delete('DELETE FROM `member` WHERE `name`=\'tom\'');
        // //新建表
        // DB::statement('CREATE TABLE `test` (`id` INT)');

        $data=DB::table('article AS t1')->select(
            't1.id',
            't1.article_name AS article_name',
            't2.author_name AS author_name'
        )->leftjoin(
            'author AS t2',
            't1.author_id','=','t2.id'
        )->get();
        foreach ($date as $v){
            echo $v->id . '-' . $v->article_name . '-' . $v->authhor_name. '<br/>';
        }
    }
    public function members()
    {
        //save方法
        // $member=new member();
        // $member->name='save';
        // $member->age='20';
        // $member->email='save@laravel.test';
        // dump($member->save());         //保存数据
        // dump($member->id);

        // //fill方法
        // $date=['name'=>'fill','age'=>'20','email'=>'fill@laravel.test'];
        // $member=new member();
        // $member->fill($data); 
        // $member->save(); 

        //create方法
        // $date=['name'=>'tom','age'=>'20'];
        // $member=Member::create($data); 
        // $member->save(); 

        //find方法
        // 查询主键为4的记录，返回模型对象
        // $member=Member::find(4);
        // dump($member->name);        //获取name字段的值
        // //添加查询条件，返回name和age字段
        // $member=Member::where('name','tom')->select('name','age')->find(5);
        // dump($member);
        // // 查询主键为1、2、3的记录,返回对象集合
        // $member=Member::find([1, 2, 3]);
        // dump($member);

        // 模型的get()方法
        // $members =Member::where('id', '2')->get();
        // dump(get_class($members[0]));
        //输出结果：“App\Member”
        // DB类的get()方法(
        // $members = DB::table('member')->where('id',2)->get();
        // dump(get_class($members[0]))；
        // 输出结果："stdClass"

        // 查询所有记录，返回对象集合
        // $members = Member::all();
        // dump($members);
        // // 查询所有记录的name和age字段，返回对象集合
        // $members = Member::all(['name', 'age']);
        // dump($members);

        //模型修改数据
        // $member=Member::find(4);
        // if($member){
        //     $member->name='test';
        //     $member->age=0;
        //     $member->email='test@laravel.test';
        //     $member->save();
        //     dump('修改成功');
        // }else{
        //     dump('修改失败');
        // }
        // Member::where('id',4)->update(['name' => 'test', 'age' => 30]);

        //删除数据
        // $member=Member::find(4);
        // if($member){
        //     $member->delete();
        //     dump('成功');
        // }else{
        //     dump('修改失败');
        // }
        Member::where('id',5)->delete();    
    }  
    public function articles()
    {
        // 一对一
        // $data=\App\Article::all();
        // foreach($data as $key => $value){
        //     echo '文章id：' . $value->id . '<br>';
        //     echo '文章名称：' . $value->article_name . '<br>';
        //     echo '文章名称：' . $value->author->author_name . '<br>';
        // }

        // 一对多
        // $data=\App\Article::all();
        // foreach($data as $key => $value){
        //     echo '作者名称：' . $value->author_name . '<br>';
        //     foreach($value->article as $k =>$v){
        //         echo $v->article_name . '<br>';
        //     }
        // }

        //多对一
        $data=\App\Article::all();
        foreach($data as $key => $value){
            echo '文章名称：' . $value->article_name . '<br>';
            echo '关键词：';
            foreach($value->keyword as $k =>$v){
                echo $v->keyword . '';
            }
            echo '<hr>';
        }
    }  
    public function captcha()
    {
        return view('captcha');
    }
    public function checkCaptcha(Request $request)
    {
        $this->validate($request,[
            'captcha' =>'required|captcha'
        ],[
            'captcha.captcha' => '验证码有误'
        ]);
        // return '验证成功';
        //return redirect('/test/avater')->withErrors(['错误提示']);
        return redirect()->route('home');
    }

    public function cache()
    {
        // Cache::put('name','张三');
        // Cache::put('name','李四',6);
        // Cache::add('age','6');
        // Cache::add('age','16');

        // $value=Cache::get('name','d');
        // $value=Cache::get('age');
        // dump($value);
        // if(Cache::has('age')){
        //     # code...
        //     dump('存在');
        // }else{
        //     dump('不存在');
        // }
        // $value=Cache::pull('age');
        // dump($value);
        // Cache::forget('age');
        // Cache::flush();

        Cache::add('count',0,1000);
        //自增
        Cache::increment('count',10);
        //自减
        //Cache::decrement('count',10);
        return '你是第' . Cache::get('count') . '位访客';
    }
    public function testarr()
    {
        $arr=Arr::add(['name'=>'Tom'],'age',18);
        dump(Arr::get($arr,'name'));
        dump(Arr::get($arr,'email','adlerian@adlerian.xyz'));
        $arr=Arr::except($arr,['email']);
        dump($arr);
    }
    public function teststr()
    {
        // $value=Str::camel('foot_bar');
        // $value=Str::kebab('footBar');
        // $value=Str::snake('footBar');
        $value=Str::is('foot*','footBar');
        $value=Str::is('bas*','footBar');
        dump($value);
        dump($value1);
    }
    public function testURL()
    {
        // $url=action('TestController@form');
        // $url1=action('TestController@form',['id'=> 1]);
        $url2=route('home');
        //生成结果：http://localhost/img/photo.jpg
        $url3=asset('img/photo.jpg');
        // dump($url);
        // dump($url1);
        dump($url2);
        dump($url3);
    }
    public function testpath()
    {
        $path=app_path();
        $path1=base_path();
        dump($path);
        dump($path1);
    }

    public function xmldata()
    {
        $xml=new \SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><booklist></booklist>');
        $book=$xml->addChild('book');
        $book->addChild('name','Laravel框架');
        $book->addChild('author','黑马程序员');
        $book=$xml->addChild('book');
        $book->addChild('name','Vue3');
        $book->addChild('author','黑马');
        $content=$xml->asXML();
        return response($content)->header('Content-Type','text/xml');
    }
    public function xml()
    {
        return view('xml');
    }

    public function jsondata()
    {
        $data=[['id'=>'1','name'=>'普京','age'=>'61'],['id'=>'2','name'=>'拜登','age'=>'63']];
        return response()->json($data);
    }
    public function json()
    {
        return view('json');
    }
}